#ifndef ANIMAL_FACTORY_H
#define ANIMAL_FACTORY_H
#include "Animal.h"
#include <dlfcn.h>
#include <memory>
#include <string>

class AnimalFactory {
public:
  // 构造函数：加载动态链接库
  explicit AnimalFactory(const std::string &libraryPath);

  // 析构函数：卸载动态链接库
  ~AnimalFactory();

  // 创建动物对象
  AnimalApiPtr createAnimal(const std::string &name) const;

  // 禁用拷贝构造和赋值
  AnimalFactory(const AnimalFactory &) = delete;
  AnimalFactory &operator=(const AnimalFactory &) = delete;

private:
  void *handle;            // 动态链接库句柄
  std::string libraryPath; // 动态链接库路径
};

#endif // ANIMAL_FACTORY_H